<?php 

class grupoController extends CatController{
    
    public function AfterLoad(){
        //$this->free_cod[] = 'sub';
        parent::AfterLoad();
        if(CURRENT_ACTION == 'index') unset($_SESSION['ocorrencia/grupo']);
        
        //carrega a classe de segurança
        $this->LoadClassFromPlugin('ocorrencia/grupo/grupoSecurity', 'security');
        
        //seta o cgroup via session ou parametro
        $this->cgroup = ($this->cod == "")?isset($_SESSION['ocorrencia/grupo'])?$_SESSION['ocorrencia/grupo']:'':$this->cod;
        
        //gera o título da página
        if($this->cod != ""){
            $this->genTags($this->item['nome'], "", '', "NOINDEX, NOFOLLOW");
            $this->registerVar ('item', $this->item);
        }
        
        //nega o acesso à página para quem não é autorizado
        if($this->cod != ""){
            //verifica as credenciais do usuário
            $temp = $this->security->CheckReadPermission($this->cod);
            if($temp == false || $temp == ""){
                $arr = array('index', 'formulario');
                if(!in_array(CURRENT_ACTION, $arr)) throw new AcessDeniedException();
            }
            
        }elseif(isset($_SESSION['ocorrencia/grupo'])) unset($_SESSION['ocorrencia/grupo']);
        
        $this->security->getMenu($this->cod);
        $this->cod = $this->cgroup;
        
        $this->LoadModel('usuario/login', 'uobj');
        /*
        $onlyadmin = array('excluir','apagar', 'formulario');
        if(!$this->uobj->UserIsAdmin() && in_array(CURRENT_ACTION, $onlyadmin)){
            Redirect(CURRENT_MODULE);
        }
        */
        $superiores = array('editar', 'participantes', 'subgrupo');
        if(in_array(CURRENT_ACTION, $superiores)){
            if(!$this->security->SuperiorHierarquico($this->cod)){
                if(!$this->uobj->UserIsAdmin()){
                    Redirect(CURRENT_MODULE);
                }
            }
        }
        
        
    }
    
    public function BeforeLoad() {
        parent::BeforeLoad();
        EventTube::removeItemFromMenu('body-top', 'Arquivar Grupo');
    }

    public $model_name = "ocorrencia/grupo";    
    public function index() {
        $this->sub();
        /*
        $this->genTags(EXIBINDO_GRUPO_DE_TRABALHO, "", '', "NOINDEX, NOFOLLOW");
        $page = isset($this->vars[0])?$this->vars[0]:0;
        $this->registerVar('grupos', $this->model->getGroups("", "g_status = 'ativo'"));
        $this->display(LINK ."/index");*/
    }
    
    public function sub(){
        $this->genTags(EXIBINDO_GRUPO_DE_TRABALHO, "", '', "NOINDEX, NOFOLLOW");
        $this->registerVar('item', $this->model->getItem($this->cod));
        $page = isset($this->vars[1])?$this->vars[1]:0;
        $this->registerVar('grupos', $lvgr = $this->model->getLevelGroup($this->cod));
        $this->registerVar('ocorrencias', $this->model->getLevelOcorrencias($lvgr, $page));
        $this->display(LINK ."/sub");
    }
    
    private $filter = array('andamento', 'paralisado');
    public function show($display = true, $link = ""){
        //carrega a categoria
        if($this->cod == "") Redirect (LINK);
        $this->registerVar('categoria', $this->model->getItem($this->cod));
        $this->display(LINK ."/show");
    }
    
    /*
    public function ocorrencia(){
        $ctr = new CController($this->vars);
        $ctr->setVars($this->vars);
        //$ctr->setTemplate($this->template);
        
        $ctr->LoadModel('ocorrencia/ocorrencias', 'model');
        $ctr->model->currentGroup($this->cgroup);
        $ctr->formulario();
    }*/
    
    public function arquivado(){
        $this->genTags("Grupos arquivados", "", '', "NOINDEX, NOFOLLOW");
        $page = isset($this->vars[0])?$this->vars[0]:0;
        $this->registerVar('info', "Exibição dos grupos arquivados");
        $this->registerVar('grupos', $this->model->getGroups("", "g_status = 'arquivado'"));
        $this->display(LINK ."/arquivado");
    }
    
    public function editar(){
        $this->checkGroupIsAvaible();
        if(!isset($_SESSION['ocorrencia/grupo'])) Redirect (LINK);
        if(!isset($this->vars[0]) || $this->vars[0] == "") $this->vars[0] = $_SESSION['ocorrencia/grupo'];
        parent::formulario();
    }

    public function apagar(){
        $this->excluir();
    }
    public function excluir(){
        
        //se o grupo não está vazio
        
        if(!$this->model->checkGroupIsEmpty($this->cod)){
            $this->registerVar('erro', $this->model->getErrorMessage());
            $this->show();
            return;
        }
        if(!isset($_SESSION['ocorrencia/grupo'])) Redirect (LINK);
        $this->LoadModel('usuario/login', 'us');
        if(!$this->security->CheckDeletePermission($_SESSION['ocorrencia/grupo'])){
            cookie::setVar($this->sess_cont_alerts, array('erro' => 'Você não tem permissão de excluir este grupo'));
            Redirect(LINK . "/show/$this->cod");
        }
        
        $id = $_SESSION['ocorrencia/grupo'];
        $var = $this->model->getItem($id);
        $pai = "";
        if(is_array($var['cod_pai'])){
            $pai = array_keys($var['cod_pai']);
            $pai = array_shift($pai);
        }
        if(!$this->model->apagar($id)){
            $this->registerVar('erro', 
                    "Não é possível apagar um grupo que contenha Assuntos ou que tenha grupos relacionados.");
            $this->display('');
            return;
        }
        $link = ($pai != "")? "ocorrencia/grupo/show/$pai": "ocorrencia/grupo";
        Redirect ($link);
    }
    
    public function arquivar(){
        if($this->model->arquivar($this->cod)){
            Redirect(LINK."/show/$this->cod");
        }
        $this->setVars($this->model->getMessages());
        $this->show();
    }
    
    public function participantes(){
        $this->checkGroupIsAvaible();
        $this->prevent_redirect();
        if(!empty ($_POST)){
            $_POST['cod_grupo'] = $this->cod;
            if(isset($_POST['excluir'])) {
                if(isset($_POST['cod_usuarios'])) $_POST['cod_usuario'] = $_POST['cod_usuarios'];
                $this->model->removerParticipante($_POST);
                $this->setVars($this->model->getMessages());
                $_POST = array();
            }
            else{
                if(!empty ($this->vars)) $this->vars = array();
                $this->LoadModel('ocorrencia/pertence', 'model');
                $cod = $this->cod;
                $this->cod = "";
                parent::formulario(false);
                $this->cod = $cod;
                $this->LoadModel('ocorrencia/grupo', 'model');
            }
        }
        
        $this->registerVar('dados', $this->model->getParticipantesForm());
        $this->registerVar('participantes', $this->model->getParticipantes($this->cod));
        $this->display(LINK. '/participantes');
    }
    
    public function formulario($display = true, $link = "") {
        $link = ($link == "")? "admin/auto/formulario":$link;
        parent::formulario(false);
        $this->genTags("Novo Grupo", "criar Grupo", '', "NOINDEX, NOFOLLOW");
        if(array_key_exists('success', $this->variaveis)) {
            $where = 'nome = "'.$_POST['nome'].'" AND ';
            $where .= (!isset($_POST['cod_pai']) || $_POST['cod_pai'] == "")? "isnull(cod_pai)": 'cod_pai = "'.$_POST['cod_pai'].'"';
            $var = $this->model->selecionar(array('cod_grupo'), $where, 1);
            //echo $this->model->db->getSentenca();
            if(!empty ($var)) {
                $this->LoadResource("html", 'html');
                $var = array_shift($var); $var = $var['cod_grupo'];
                $link = $this->html->getLink(LINK."/show/$var");                
                $this->registerVar('redirect', $link);
            }
        }
        $this->registerVar('titulo', CRIAR_NOVO_GRUPO);
        if($display) $this->display($link);
    }
    
    public function subgrupo(){
        $this->checkGroupIsAvaible();
        $this->genTags($this->item['nome'] . " - Novo subgrupo", "criar subgrupo", '', "NOINDEX, NOFOLLOW");
        $this->cod = "";
        if(!empty ($_POST)) $_POST['cod_pai'] = $this->cgroup;
        parent::formulario();
    }

    public function status(){
        print_r($this->vars);
    }
    
    public function lixeira(){
        $this->genTags("Lixeira - ".$this->item['nome'] , "Lixeira do grupo" . $this->item['nome'], '', "NOINDEX, NOFOLLOW");
        
        array_shift($this->vars);
        $page = array_shift($this->vars);
        $this->item['ocorrencia_ocorrencias'] = $this->model->lixeira($this->cod, $page);
        if($this->cgroup == "") Redirect (LINK);
        $this->registerVar('categoria',  $this->item);
        $this->display(LINK ."/show");
        $this->show();
    }
    
    public function arquivo(){
        array_shift($this->vars);
        $page = array_shift($this->vars);
        $this->item['ocorrencia_ocorrencias'] = $this->model->arquivo($this->cod, $page);
        if($this->cgroup == "") Redirect (LINK);
        $this->registerVar('categoria',  $this->item);
        $this->display(LINK ."/show");
    }
    
    public function atraso(){
        $this->filter(__FUNCTION__);
    }
    
    public function solicitadas(){
        $this->filter(__FUNCTION__);
    }
    
    public function ultimas(){
        $this->filter(__FUNCTION__);
    }
    
    public function todas(){
        $this->filter(__FUNCTION__);
    }
    
    public function filter($function = 'atraso'){
        //carrega a categoria
        if($this->cgroup == "") Redirect (LINK);

        //seleciona o método de filtragem
        $list = array(
            'atraso' => 'getEmAtraso', 
            'solicitadas'=>'getMinhasSolicitacoes', 
            'ultimas'=>'getUltimasOcorrencias',
            'todas'=>'getTodasOcorrencias'
        );
        if(!array_key_exists($function, $list)) $function = "atraso";
        $function = $list[$function];
        
        //carrega as ocorrencias
        $page = @$this->vars[2];
        $var = $this->model->$function($this->cod, $page);
        foreach($var as $name => $v){
            $this->genTags($name);
            $var = $v;
            break;
        }
        $this->item['ocorrencia_ocorrencias'] = $var['item'];
        $this->registerVar('categoria', $this->item);
        $this->display(LINK."/show");
    }
    
    public function novaocorrencia(){
        Redirect('ocorrencia/ocorrencias/formulario');
    }
    
     private function checkGroupIsAvaible(){
        if(empty($this->item)) return true;
        if($this->item['__g_status'] == 'arquivado'){
            $this->registerVar('erro','Você não pode fazer nenhuma alteração neste grupo, pois ele está arquivado!');
            $this->redirect(LINK ."/show/$this->cod");
            return false;
        }
        return true;
    }
    
}
?>